#ifndef	_J_SPREMNIK_H_
#define	_J_SPREMNIK_H_

#include <arh/spremnik.h>
#include "razno.h"
#include "postavke.h"

void j_inicijaliziraj_spremnik ();

inline void *j_spremnik_za_kontekst ( int id_dretve );

void j_inicijaliziraj_spremnik_za_proces ( int proces_id,
					   void *pocetna_adresa,
					   aint velicina,
					   bool u_jezgri, bool stranicenje );

void j_pripravi_okolinu_dretvi ();

void j_oslobodi_spremnicki_prostor_procesa ( void *_spremnik );

#if	defined(_J_SPREMNIK_C_) || defined(_J_STRANICENJE_C_) || 	\
	defined(_J_PROCESI_C_) || defined(_ARH_KONTEKST_C_)

#include "stranicenje.h"

//opisnik spremnika procesa
typedef struct _j_spremnik_t_ {
	//koristi li se stranicenje ili "segmentacija"
	bool stranicenje;

	//opis segmenata za segmentne registre
	arh_spremnik_t segmentacija;

	//opisnik prve tablice u razini ("direktorij stranica")
	j_tabstr_t stranice;

	//sto je alocirano/rezervirano (koristi se u stranicenju)
	j_lista_segmenata_t segmenti;


	//opisnici za kontekst i stogove - koriste se u oba nacina upravljanja

	//mjesto za opisnike dretvi
	void *kontekst_dretvi;
	uint32 mkontekst_dretvi[VELMASKE(NAJ_DRETVI)];

	//stogovi dretvi - adresa kraja
	void *stogovi;
	uint32 mstogovi[VELMASKE(NAJ_DRETVI)];

} j_spremnik_t;

#endif

#endif	/* _J_SPREMNIK_H_ */
